<template>
  <div class="review-card">
    <!-- 评论文本 - 完全由外部传入 -->
    <p class="review-text">{{ reviewText }}</p>

    <!-- 头像 - 完全由外部传入 -->
    <div class="avatar">
      <img
        :src="avatarUrl"
        :alt="avatarAlt"
        class="avatar-image"
      >
    </div>

    <!-- 评分星星 -->
    <div class="stars">
      <span
        v-for="star in 5"
        :key="star"
        :class="{ 'filled-star': star <= rating, 'empty-star': star > rating }"
      >★</span>
    </div>
  </div>
</template>

<script>
  export default {
    name: 'ReviewCard',
    props: {
      // 评论文本内容 - 必须传入，无默认值
      reviewText: {
        type: String,
        required: true
      },
      // 头像图片URL - 必须传入，无默认值
      avatarUrl: {
        type: String,
        required: true
      },
      // 头像alt文本 - 必须传入，无默认值
      avatarAlt: {
        type: String,
        required: true
      },
      // 评分（1-5）- 有默认值5
      rating: {
        type: Number,
        default: 5,
        validator: value => value >= 1 && value <= 5 && Number.isInteger(value)
      }
    },
  }
</script>

<style scoped>
  /* 适用于所有评论组件的图片样式 */
  .avatar-image {
    /* 核心规则：限制最大宽高，不超过容器 */
    max-width: 100%;
    max-height: 100%;

    /* 保持图片比例，避免拉伸变形 */
    object-fit: contain; /* 优先完整显示图片，可能留空白 */
    /* 或使用 object-fit: cover; 填充容器（可能裁剪部分图片） */

    /* 可选：移除默认边框和间距 */
    border: none;
    padding: 0;
    margin: 0;
  }

  .review-card {
    width: 500px;
    background-color: #b9f6ca;
    border-radius: 30px;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: flex-start;
    padding: 20px;
    font-family: Arial, sans-serif;
    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
    transition: transform 0.3s ease;
  }

  .review-card:hover {
    transform: translateY(-5px);
  }

  .review-text {
    font-size: 28px;
    color: #000;
    line-height: 1.2;
    margin: 0 20px;
    flex: 1;
    white-space: pre-line; /* 支持换行符 */
  }

  .avatar {
    width: 120px;
    height: 120px;
    border-radius: 50%;
    border: 2px dashed #000;
    display: flex;
    justify-content: center;
    align-items: center;
    background-color: #fff;
    overflow: hidden;
  }

  .avatar-image {
    width: 80px;
    height: 80px;
    border-radius: 50%;
    object-fit: cover;
  }

  .stars {
    width: 100%;
    text-align: center;
    margin-top: 10px;
    font-size: 24px;
  }

  .filled-star {
    color: #ffeb3b;
    text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
  }

  .empty-star {
    color: #d3d3d3;
  }

  /* 响应式调整 */
  @media (max-width: 600px) {
    .review-card {
      width: 90%;
      flex-direction: column;
    }

    .review-text {
      margin: 0 0 20px 0;
      text-align: center;
      font-size: 22px;
    }
  }
</style>

